home *** CD-ROM | disk | FTP | other *** search
- 10 REM PI87.BAS -- Performance Index Benchmark Program
- 20 REM Copyright (C) MicroWay, Inc., 1986
- 30 REM MicroWay, Inc. PO Box 79 Kingston MA 02364 (617) 746-7341
- 40 REM
- 50 REM Uses Numeric Coprocessor (8087 or 80287). See PI.BAS for a similar
- 60 REM program which doesn't use the Numeric Coprocessor.
- 70 REM Compiled with MicroWay 87BASIC Compiler V5.05 (/O switch) and linked
- 80 REM with special library based on MicroWay 87BASIC/INLINE.
- 90 REM
- 100 DEFINT A-Y
- 110 DIM NAME$ (11), SECTION$ (11), ZF (11), ZP (11)
- 120 DIM DSRC (10249), DDEST (10249)
- 130 COMMON DSRC (), DDEST (), SPC1!, SPC2!, SPC3!, SVA!, SVB!
- 140 DEF FNS# (X$) = 60# * (60# * VAL (MID$ (X$, 1, 2)) + VAL (MID$ (X$, 4, 2))) + VAL (MID$ (X$, 7, 2)) + .01# * VAL (MID$ (X$, 10, 2))
- 150 LINES$ = "" : FOR I = 1 TO 69 : LINES$ = LINES$ + CHR$ (205) : NEXT I
- 160 PRINT CHR$ (201); LINES$; CHR$ (187)
- 170 PRINT CHR$ (186); " M i c r o W a y P e r f o r m a n c e I n d e x P r o g r a m "; CHR$ (186)
- 180 PRINT CHR$ (200); LINES$; CHR$ (188)
- 190 PRINT " Copyright (C) MicroWay, Inc., 1986."
- 200 PRINT " (This version uses the Numeric Coprocessor.)"
- 210 PRINT
- 220 DATA 0.6,0.6,0.6,0.6,0.595,0.589,0.62,0.6,0.6,0.6064,0.6064
- 230 DATA " 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8"," 9","10","11"
- 240 DATA "Floating point -- arithmetic "
- 250 DATA "Floating point -- Savage (transcendentals) "
- 260 DATA "Data bus bound -- 4K bytes of instructions "
- 270 DATA "Data bus bound -- 4K bytes of register moves "
- 280 DATA "Data bus bound -- 16K bytes of instructions "
- 290 DATA "Clock bound -- 4K byte block moves "
- 300 DATA "Clock bound -- 16K byte block moves "
- 310 DATA "Integer multiply and divide "
- 320 DATA "Subroutine calls and stack operations "
- 330 DATA "Disk I/O -- sequential read from random file "
- 340 DATA "Disk I/O -- sequential write to random file "
- 350 DATA 25,25,11.111111,11.111111,11.111111,8.333333,8.333333,0,0,0,0
- 360 CALL TIME100
- 370 FIRSTTIME = 1
- 380 FOR I = 1 TO 11 : READ ZF (I) : NEXT I
- 390 FOR I = 1 TO 11 : READ SECTION$ (I) : NEXT I
- 400 FOR I = 1 TO 11 : READ NAME$ (I) : NEXT I
- 410 FOR I = 1 TO 11 : READ ZP (I) : NEXT I
- 420 MAXWRITES = 20 : MAXREADS = 20
- 430 GOTO 560
- 440 REM *** Create file so that reads will have something to work on
- 450 REM *** and so that writes will not have to create new records.
- 460 IF MAXWRITES > MAXREADS THEN MPUT = MAXWRITES : ELSE MPUT = MAXREADS
- 470 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
- 480 FIELD #1, 2048 AS S$
- 490 T$ = "" : FOR I=0 TO 1023 : T$ = T$ + MKI$ (256 * RND (I)) : NEXT I
- 500 LSET S$ = T$
- 510 FOR I = 1 TO MPUT : PUT #1, I : NEXT I : CLOSE #1
- 520 PRINT "Please enter percentage of benchmark devoted to each operation."
- 530 FOR I = 1 TO 11
- 540 PRINT "Section ";SECTION$ (I);" ";NAME$ (I);": "; : INPUT "", ZP (I)
- 550 NEXT I
- 560 ZT = 0 : FOR I = 1 TO 11 : ZT = ZT + ZP (I) : NEXT I
- 570 IF ZT > 99.5 AND ZT < 100.5 THEN GOTO 630
- 580 PRINT : PRINT "Caution: percentages total "; ZT;
- 590 INPUT " Adjust to 100% ? ", ADJ$ : PRINT : ADJ$ = LEFT$ (ADJ$, 1)
- 600 IF ADJ$ = "Y" OR ADJ$ = "y" THEN GOTO 620
- 610 IF ADJ$ = "N" OR ADJ$ = "n" THEN GOTO 650 : ELSE GOTO 590
- 620 IF ZT = 0! THEN GOTO 830
- 630 Z100 = 1# / ZT : FOR I = 1 TO 11 : ZP (I) = ZP (I) * Z100 : NEXT I
- 640 ZT = 100# : GOTO 660
- 650 FOR I = 1 TO 11 : ZP (I) = .01 * ZP (I) : NEXT I
- 660 PRINT "Section Description Performance Index"
- 670 PRINT "======= ============================================= ================="
- 680 ZTET = 0# : FOR J = 1 TO 11
- 690 ZITER = 60# * ZP (J) / ZF (J)
- 700 ITER = INT (ZITER) : IF ZITER - ITER > .1 THEN ITER = ITER + 1
- 710 REM 1 2 3 4 5 6 7 8 9 10 11
- 720 ON J GOSUB 910,920,930,940,950,960,970,980,990,1000,1070
- 730 ZET = FNS# (B$) - FNS# (A$)
- 740 IF ITER <> 0 THEN ZET = ZET * ZITER / ITER : ELSE ZET = 0#
- 750 PRINT " ";SECTION$ (J);" ";NAME$ (J);" ";
- 760 IF ZET = 0 THEN PRINT " ----" : GOTO 780
- 770 PRINT USING "###.##"; ZF (J) * ZITER / ZET
- 780 ZTET = ZTET + ZET
- 790 NEXT J
- 800 PRINT : PRINT "Performance index for entire benchmark is ";
- 810 IF ZTET = 0 THEN PRINT "not meaningful." : GOTO 830
- 820 PRINT USING "###.##"; .6# * ZT / ZTET
- 830 PRINT
- 840 INPUT "Would you like to run again, specifying the section weights yourself? ", MORE$ : MORE$ = LEFT$ (MORE$, 1)
- 850 IF MORE$ = "Y" OR MORE$ = "y" THEN GOTO 890
- 860 IF MORE$ = "N" OR MORE$ = "n" THEN GOTO 870 : ELSE GOTO 830
- 870 IF FIRSTTIME > 1 THEN KILL "TEMP.TMP"
- 880 END
- 890 PRINT : FIRSTTIME = FIRSTTIME + 1
- 900 IF FIRSTTIME = 2 THEN GOTO 440 : ELSE GOTO 520
- 910 A$ = TIME$ : FOR I = 1 TO ITER : CALL FPCSE : NEXT I : B$ = TIME$ : RETURN
- 920 A$ = TIME$ : FOR I = 1 TO ITER : CALL FPSAV : NEXT I : B$ = TIME$ : RETURN
- 930 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB4 : NEXT I : B$ = TIME$ : RETURN
- 940 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBBCACHE:NEXT I: B$ = TIME$ : RETURN
- 950 A$ = TIME$ : FOR I = 1 TO ITER : CALL DBB16 : NEXT I : B$ = TIME$ : RETURN
- 960 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB4 : NEXT I : B$ = TIME$ : RETURN
- 970 A$ = TIME$ : FOR I = 1 TO ITER : CALL CB16 : NEXT I : B$ = TIME$ : RETURN
- 980 A$ = TIME$ : FOR I = 1 TO ITER : CALL IA : NEXT I : B$ = TIME$ : RETURN
- 990 A$ = TIME$ : FOR I = 1 TO ITER : CALL XFER : NEXT I : B$ = TIME$ : RETURN
- 1000 REM *** Random reads
- 1010 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
- 1020 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
- 1030 FIELD #1, 2048 AS S$
- 1040 A$ = TIME$
- 1050 FOR K = 1 TO ITER : FOR I = 1 TO MAXREADS : GET #1, I : NEXT I : NEXT K
- 1060 B$ = TIME$ : CLOSE #1 : RETURN
- 1070 REM *** Random writes
- 1080 IF ITER = 0 THEN A$=TIME$ : B$=A$ : RETURN
- 1090 OPEN "TEMP.TMP" FOR RANDOM AS #1 LEN=2048
- 1100 FIELD #1, 2048 AS S$ : LSET S$ = T$
- 1110 A$ = TIME$
- 1120 FOR K = 1 TO ITER : FOR I = 1 TO MAXWRITES : PUT #1, I : NEXT I : NEXT K
- 1130 B$ = TIME$ : CLOSE #1 : RETURN